/**
 * SOP模块 - 通知记录API
 * @description 通知记录相关的API接口定义
 * @author AI Assistant
 * @since 1.0.0
 */

import request from '@/config/axios'
import type { NotifyRecordVO, NotifyRecordPageReqVO, NotifyRetryReqVO, PageResult } from './types'

/**
 * 获取通知记录分页列表
 * @param params 分页查询参数
 * @returns 通知记录分页数据
 */
export const getNotifyRecordPageApi = (
  params: NotifyRecordPageReqVO
): Promise<PageResult<NotifyRecordVO>> => {
  return request.get({ url: '/sop/notify-record/page', params })
}

// 兼容视图层命名：分页查询通知记录
export const getNotifyPageApi = (
  params: NotifyRecordPageReqVO
): Promise<PageResult<NotifyRecordVO>> => {
  return getNotifyRecordPageApi(params)
}

/**
 * 获取通知记录详情
 * @param id 记录ID
 * @returns 通知记录详情
 */
export const getNotifyRecordApi = (id: number): Promise<NotifyRecordVO> => {
  return request.get({ url: `/sop/notify-record/get?id=${id}` })
}

// 兼容视图层命名：获取通知记录详情
export const getNotifyApi = (id: number): Promise<NotifyRecordVO> => {
  return getNotifyRecordApi(id)
}

/**
 * 手动重试通知
 * @param data 重试数据
 * @returns 重试结果
 */
export const retryNotifyApi = (data: NotifyRetryReqVO): Promise<boolean> => {
  return request.post({ url: '/sop/notify-record/retry', data })
}

/**
 * 批量重试通知
 * @param ids 记录ID列表
 * @returns 批量重试结果
 */
export const batchRetryNotifyApi = (ids: number[]): Promise<boolean> => {
  return request.post({
    url: '/sop/notify-record/batch-retry',
    data: { ids }
  })
}

/**
 * 停止通知重试
 * @param id 记录ID
 * @param remark 停止原因
 * @returns 停止结果
 */
export const stopNotifyRetryApi = (id: number, remark?: string): Promise<boolean> => {
  return request.put({
    url: '/sop/notify-record/stop-retry',
    data: { id, remark }
  })
}

/**
 * 批量停止通知重试
 * @param ids 记录ID列表
 * @param remark 停止原因
 * @returns 批量停止结果
 */
export const batchStopNotifyRetryApi = (ids: number[], remark?: string): Promise<boolean> => {
  return request.put({
    url: '/sop/notify-record/batch-stop-retry',
    data: { ids, remark }
  })
}

/**
 * 删除通知记录
 * @param id 记录ID
 * @returns 删除结果
 */
export const deleteNotifyRecordApi = (id: number): Promise<boolean> => {
  return request.delete({ url: `/sop/notify-record/delete?id=${id}` })
}

/**
 * 批量删除通知记录
 * @param ids 记录ID列表
 * @returns 批量删除结果
 */
export const batchDeleteNotifyRecordApi = (ids: number[]): Promise<boolean> => {
  return request.delete({
    url: '/sop/notify-record/batch-delete',
    data: { ids }
  })
}

/**
 * 清理过期通知记录
 * @param days 保留天数
 * @returns 清理结果
 */
export const cleanExpiredNotifyRecordsApi = (
  days: number
): Promise<{
  deletedCount: number // 删除数量
}> => {
  return request.delete({ url: `/sop/notify-record/clean-expired?days=${days}` })
}

/**
 * 获取通知统计数据
 * @param params 查询参数
 * @returns 统计数据
 */
export const getNotifyStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  notifyType?: string
  dateRange?: [string, string]
}): Promise<{
  totalNotifies: number // 总通知数
  successNotifies: number // 成功通知数
  failedNotifies: number // 失败通知数
  pendingNotifies: number // 待通知数
  successRate: number // 成功率(%)
  avgRetryCount: number // 平均重试次数
  maxRetryCount: number // 最大重试次数
  totalRetryCount: number // 总重试次数
}> => {
  return request.get({ url: '/sop/notify-record/statistics', params })
}

/**
 * 获取通知类型统计
 * @param params 查询参数
 * @returns 通知类型统计数据
 */
export const getNotifyTypeStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  dateRange?: [string, string]
}): Promise<
  Array<{
    notifyType: string // 通知类型
    totalCount: number // 总数量
    successCount: number // 成功数量
    failedCount: number // 失败数量
    pendingCount: number // 待通知数量
    successRate: number // 成功率(%)
    avgRetryCount: number // 平均重试次数
  }>
> => {
  return request.get({ url: '/sop/notify-record/type-statistics', params })
}

/**
 * 获取通知失败原因统计
 * @param params 查询参数
 * @returns 失败原因统计数据
 */
export const getNotifyFailReasonStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  notifyType?: string
  dateRange?: [string, string]
}): Promise<
  Array<{
    responseCode: number // 响应状态码
    responseBody: string // 响应内容
    failCount: number // 失败次数
    failRate: number // 失败率(%)
    firstOccurTime: string // 首次出现时间
    lastOccurTime: string // 最后出现时间
  }>
> => {
  return request.get({ url: '/sop/notify-record/fail-reason-statistics', params })
}

/**
 * 获取通知趋势分析
 * @param params 查询参数
 * @returns 趋势分析数据
 */
export const getNotifyTrendAnalysisApi = (params: {
  appId?: string
  merchantNo?: string
  notifyType?: string
  dateRange: [string, string] // 日期范围(必填)
  granularity: string // 统计粒度: day-按天 hour-按小时(必填)
}): Promise<
  Array<{
    date: string // 日期
    hour?: number // 小时(按小时统计时有值)
    totalCount: number // 总通知数
    successCount: number // 成功通知数
    failedCount: number // 失败通知数
    pendingCount: number // 待通知数
    successRate: number // 成功率(%)
    avgRetryCount: number // 平均重试次数
  }>
> => {
  return request.get({ url: '/sop/notify-record/trend-analysis', params })
}

/**
 * 导出通知记录数据
 * @param params 查询参数
 * @returns 导出文件
 */
export const exportNotifyRecordApi = (params: NotifyRecordPageReqVO): Promise<void> => {
  return request.download({
    url: '/sop/notify-record/export',
    params
  })
}

/**
 * 测试通知地址
 * @param notifyUrl 通知地址
 * @param testData 测试数据
 * @returns 测试结果
 */
export const testNotifyUrlApi = (
  notifyUrl: string,
  testData?: string
): Promise<{
  success: boolean // 测试是否成功
  responseCode: number // 响应状态码
  responseBody: string // 响应内容
  executeTime: number // 执行时间(毫秒)
  errorMsg?: string // 错误信息
}> => {
  return request.post({
    url: '/sop/notify-record/test-url',
    data: { notifyUrl, testData }
  })
}
